package w.z.x.framework.repository.structures;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * 分页
 *
 * @author 魏祖潇
 */
@Data
public class Page<E> implements Serializable {
    private static final long serialVersionUID = -1L;

    /**
     * 当前页码
     */
    private int current;

    /**
     * 每页大小
     */
    private int size;

    /**
     * 总记录数
     */
    private long total;

    /**
     * 记录
     */
    private List<E> rows;

    /**
     * 总页数
     *
     * @return 总页数
     */
    public Integer getPages() {
        if (1 > size) {
            throw new RuntimeException("无效 size 参数");
        }
        return new BigDecimal(this.total).divide(new BigDecimal(this.size), 0, BigDecimal.ROUND_UP).intValue();
    }

    /**
     * 转化
     *
     * @param current 当前页码
     * @param size    每页条数
     * @param total   总条数
     * @param rows    数据
     * @param <E>     泛型
     * @return 分页
     */
    public static <E> Page<E> convert(int current, int size, Long total, List<E> rows) {
        Page<E> it = new Page<>();
        it.current = current;
        it.size = size;
        it.total = total;
        it.rows = rows;
        return it;
    }

    /**
     * 构建
     *
     * @param current 当前页码
     * @param size    每页大小
     * @param <E>     泛型
     * @return 分页
     */
    public static <E> Page<E> build(int current, int size) {
        Page<E> it = new Page<>();
        it.current = current;
        it.size = size;
        it.total = 0L;
        it.rows = new ArrayList<>();
        return it;
    }

}
